package com.unitd.base.module.shoe.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Maps;
import com.unitd.base.frame.plugin.db.datasource.annotion.DataSource;
import com.unitd.base.frame.util.BeanUtils;
import com.unitd.base.frame.util.StringUtils;
import com.unitd.base.module.comm.enums.ShelvesEnum;
import com.unitd.base.module.shoe.mybatis.mapper.GoodsMapper;
import com.unitd.base.module.shoe.pojo.dto.GoodsVO;
import com.unitd.base.module.shoe.pojo.po.GoodsPO;
import com.unitd.base.module.shoe.service.GoodsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * SQLServer 数据库对应的商品信息业务逻辑实现类
 *
 * @author Goods
 * @version 1.0
 * @filename GoodsServiceImpl.java
 * @copyright www.pactera.com
 * @date 2020-08-27
 */
@Slf4j
@Service
public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, GoodsPO> implements GoodsService {

    /**
     * 根据条件查询商品列表
     *
     * @param datasource 需要读取的数据名称
     * @param param      商品查询条件
     * @return 商品列表
     */
    @Override
    @DataSource(name = "datasource")
    public List<GoodsVO> selectByBean(String datasource, Map<String, Object> param) {
        List<GoodsPO> pos = baseMapper.selectByMap(param);
        return pos.stream().map(this::convertPoToVo).collect(Collectors.toList());
    }

    /**
     * 根据条件查询商品列表
     *
     * @param datasource 需要读取的数据名称
     * @param goodsNo      商品查询条件
     * @param picUrl      商品查询条件
     * @return 商品列表
     */
    @DataSource(name = "datasource")
    public int updateUrl(String datasource, String goodsNo,String picUrl) {
        Map<String, Object> param = Maps.newHashMap();
        param.put("f3125",goodsNo);
        List<GoodsPO> pos = baseMapper.selectByMap(param);
        GoodsPO goodsPO = pos.get(0);
        goodsPO.setF8164(goodsPO.getF8164()+","+picUrl);
        return baseMapper.updateById(goodsPO);
    }

    /**
     * 根据条件查询商品列表
     *
     * @param datasource 需要读取的数据名称
     * @param goodsNo      商品查询条件
     * @param status      商品查询条件
     * @return 商品列表
     */
    @DataSource(name = "datasource")
    public int updateStatus(String datasource, String goodsNo,String status){
        Map<String, Object> param = Maps.newHashMap();
        param.put("f3125",goodsNo);
        List<GoodsPO> pos = baseMapper.selectByMap(param);
        GoodsPO goodsPO = pos.get(0);
        goodsPO.setF8500(status);
        return baseMapper.updateById(goodsPO);
    }

    /**
     * 将公司数据源信息PO对象转换成VO对象
     *
     * @param po 公司数据源信息po对象
     * @return 公司数据源信息vo对象
     */
    private GoodsVO convertPoToVo(GoodsPO po) {

        String status = ShelvesEnum.getValueByCode(po.getF8500());
        if (StringUtils.isNull(status)) {
            status = ShelvesEnum.DOWN.getMessage();
        }

        GoodsVO vo = new GoodsVO();
        vo.setId(po.getId());
        vo.setF3125_goodsNo(po.getF3125());
        vo.setF8500_status(status);
        if(!BeanUtils.isNull(po.getF8164())){
            String [] urls = po.getF8164().split(",");
            vo.setPicUrls(urls);
            vo.setF8164_picUrl(urls[urls.length-1]);//默认显示最新一个
        }
        if(BeanUtils.isNull(po.getF3132())||"".equals(po.getF3132().trim())){
            vo.setF3132_name(po.getF3126()+po.getF3128());
        }else{
            vo.setF3132_name(po.getF3132());
        }
        vo.setF3133(po.getF3133());
        vo.setF3131_price(po.getF3131());
        vo.setCreateDate(po.getFilldate());
        vo.setF3129_size(po.getF3129());
        vo.setF3128_color(po.getF3128());
        vo.setF3126_categoryNo(po.getF3126());
        vo.setF3127_itemNo(po.getF3127());
        return vo;
    }
}